package com.senior.langchain4jaistreamchat.config;

import dev.langchain4j.model.chat.listener.ChatModelErrorContext;
import dev.langchain4j.model.chat.listener.ChatModelListener;
import dev.langchain4j.model.chat.listener.ChatModelRequestContext;
import dev.langchain4j.model.chat.listener.ChatModelResponseContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class LogChatModelListener implements ChatModelListener {

    /**
     * 处理聊天模型请求事件
     *
     * @param requestContext 请求上下文对象，包含模型调用时的参数信息
     * @implNote 调用父类默认实现并记录请求参数日志
     */
    @Override
    public void onRequest(ChatModelRequestContext requestContext) {
        ChatModelListener.super.onRequest(requestContext);
        requestContext.attributes().put("requestId", "123456");
        log.info("onRequest 请求参数: {}", requestContext);
    }

    /**
     * 处理聊天模型响应事件
     *
     * @param responseContext 响应上下文对象，包含模型返回的完整交互信息
     * @return 无返回值
     * <p>
     * 该方法在每次收到聊天模型响应时触发，执行以下操作：
     * 1. 调用父类默认实现处理响应
     * 2. 通过日志记录器输出完整的响应上下文信息
     */
    @Override
    public void onResponse(ChatModelResponseContext responseContext) {
        ChatModelListener.super.onResponse(responseContext);
        responseContext.attributes().get("requestId");
        log.info("onResponse返回参数: {}", responseContext);
    }

    @Override
    public void onError(ChatModelErrorContext errorContext) {
        ChatModelListener.super.onError(errorContext);
        log.info("onError: {}", errorContext);
    }
}
